/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ui;

import io.InformeDiarioDTO;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author facundo
 */
class PagosMesTableModel extends AbstractTableModel {

    /**
     * Encabezado de la tabla
     */
    String[] columnNames = {"Fecha", "Cuotas", "Entrega", "Services", "Repuestos", "Gestoría","Interés", "Gastos Fijos", "Gastos Varios", "Sueldos"};
    /**
     * Lista de ventas a mostrar en la tabla
     */
    ArrayList<InformeDiarioDTO> data = new ArrayList<InformeDiarioDTO>();

    /**
     * Permite setear la lista de pagos de una cuota
     * @param data 
     */
    public void setData(ArrayList<InformeDiarioDTO> data) {
        this.data = data;
    }

    /**
     * Permite obtener un elemento indicando su posición en la tabla
     * @param posicion
     * @return 
     */
    public String getElementAt(int posicion) {
        return this.data.get(posicion).getFecha();
    }

    /**
     * Sobreescribimos este método para que se puedan editar los valores
     * que se encunetran en las celdas de la tabla mostrada en la pantalla
     * @param row numero de fila
     * @param column numero de columna
     * @return true si la celda se puede modificar, false en caso contrario
     */
    @Override
    public boolean isCellEditable(int row, int column) {
        // Aquí devolvemos true o false según queramos que una celda
        // identificada por fila,columna (row,column), sea o no editable
        return true;
    }

    /**
     * Este método se invoca luego de modificarse un valor en la tabla, modifica
     * el objeto y almacena el cambio en la base de datos
     * @param dato
     * @param fila
     * @param columna 
     */
    @Override
    public void setValueAt(Object dato, int fila, int columna) {
        InformeDiarioDTO pago = this.data.get(fila);
        switch (columna) {
            case 0:
                pago.setFecha(dato.toString());
                break;
            case 1:
                pago.setCuotas(Double.parseDouble(dato.toString()));
                break;
            case 2:
                pago.setEntregas(Double.parseDouble(dato.toString()));
                break;
            case 3:
                pago.setServices(Double.parseDouble(dato.toString()));
                break;
            case 4:
                pago.setRepuestos(Double.parseDouble(dato.toString()));
                break;
            case 5:
                pago.setGestoria(Double.parseDouble(dato.toString()));
                break;
            case 6:
                pago.setInterés(Double.parseDouble(dato.toString()));
                break;
            case 7:
                pago.setGastosFijos(Double.parseDouble(dato.toString()));
                break;
            case 8:
                pago.setGastosVarios(Double.parseDouble(dato.toString()));
                break;
            case 9:
                pago.setSueldos(Double.parseDouble(dato.toString()));
                break;
        }
       
    }

    /**
     * Devuelve la cantidad de filas de la tabla
     * @return 
     */
    @Override
    public int getRowCount() {
        return this.data.size();
    }

    /**
     * Devuelve la cantidad de columnas de la tabla
     * @return 
     */
    @Override
    public int getColumnCount() {
        return this.columnNames.length;
    }

    /**
     * Devuelve el nombre de cada columna para utilizarse en el encabezado
     * @param col
     * @return 
     */
    @Override
    public String getColumnName(int col) {
        return columnNames[col].toString();
    }

    /**
     * De acuerdo a la posición en la tabla devuelve el objeto que debe ubicarse
     * alli cuando se dibuja la misma
     * @param rowIndex
     * @param columnIndex
     * @return 
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Object object = "";
        switch (columnIndex) {
            case 0:
                object = this.data.get(rowIndex).getFecha();
                break;
            case 1:
                object = this.data.get(rowIndex).getCuotas();
                break;
            case 2:
                object = this.data.get(rowIndex).getEntregas();
                break;
            case 3:
                object = this.data.get(rowIndex).getServices();
                break;
            case 4:
                object = this.data.get(rowIndex).getRepuestos();
                break;
            case 5:
                object = this.data.get(rowIndex).getGestoria();
                break;
            case 6:
                object = this.data.get(rowIndex).getInterés();;
                break;
            case 7:
                object = this.data.get(rowIndex).getGastosFijos();
                break;
            case 8:
                object = this.data.get(rowIndex).getGastosVarios();
                break;
            case 9:
                object = this.data.get(rowIndex).getSueldos();
                break;
        }
        return object;
    }
}